website/functions: CONTROL vocabulary gains code-only/unregistered - #1044
Conversation
t27 specs/functions/README.md (gHashTag/t27#4038) added the value for the five functions withdrawn from the bot's registerFunctions.ts on 2026-09-17 (999-multibots-telegraf#2502). The generator accepts it and the card shows no distance when spec and manifest agree; a value outside the vocabulary is still a build problem (test added). The vendored manifest is refreshed separately once the bot PR lands.
|
Reviewer bee Y: not merged. (1) Its own spec of record, gHashTag/t27#4038, is still OPEN (the 999 side, #2502, merged 2026-09-23), so the site would accept a CONTROL value the spec does not yet define. (2) Required status 'T27 work report' = FAILURE. (3) The body says test 31 of agents-from-specs fails on main too -- re-check on current main when rebasing. Merge after t27#4038 lands and the author adds the work report. |
|
bee review: not merged. Head 8f24ab6, MERGEABLE but BLOCKED: required |
|
Bee review: evidence for #1044 at
Verdict: sound, isolated. Merging. |
Companion of gHashTag/t27#4038 (spec of record) and gHashTag/999-multibots-telegraf#2502 (registry + manifest).
Not in this PR: public/functions/manifest.json is still the 28-function vendored copy (no crm-proactive-sweep, five withdrawn still spec+code). Refresh it after #2502 merges, otherwise the five cards would show a CONTROL distance (warn) -- which would be the honest state until then.
Witness: node --test scripts/agents-from-specs.test.mjs 46 pass / 1 fail; the failing test 31 (tri tool spec card) fails on main before this change too.
{ "version": 1, "head_sha": "8f24ab65a96315c56297506c59d62ed16d3ab348", "summary": "The website's function-card generator accepts code-only/unregistered as a CONTROL value, so a function withdrawn from registerFunctions.ts but still present in the bot tree can be described honestly without a build problem.", "changes": [ "apps/website/scripts/agents-from-specs.mjs adds code-only/unregistered to FN_CONTROLS, with a comment saying the code exists but is withdrawn and not served.", "apps/website/scripts/agents-from-specs.test.mjs adds one test: a spec and a manifest entry that both say code-only/unregistered build with no problems, no differences and health ok, while an out-of-vocabulary value is still a build problem." ], "tests": [ { "command": "node --test scripts/agents-from-specs.test.mjs", "result": "46 tests passed and 1 failed; the author states the failing test 31 (tri tool spec card) fails on main before this change too.", "status": "failed", "evidence": "Author-reported witness in this PR body; not rerun for this report." }, { "command": "Website checks workflow, job checks, on head 8f24ab65", "result": "The job completed successfully on the PR head commit.", "status": "passed", "evidence": "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/gHashTag/trinity/actions/runs/35192340841 (that workflow does not run test:agents-specs)" } ], "limitations": [ "public/functions/manifest.json is still the 28-function vendored copy; until it is refreshed after gHashTag/999-multibots-telegraf#2502, five cards would show a CONTROL distance warning.", "The pre-existing failure of test 31 in agents-from-specs.test.mjs is not addressed by this PR." ], "tags": [ "website", "specs", "functions" ], "blog": { "title": "A withdrawn function gets its own CONTROL value", "summary": "Function cards on the site are generated from specs; a function whose code remains but is no longer registered now has a vocabulary value that says exactly that.", "outline": [ "Five bot functions left registerFunctions.ts while their code stayed in the tree, and the card generator had no CONTROL value that described that state honestly.", "The vocabulary gains code-only/unregistered, matching the value the bot manifest uses, so spec and manifest agree and the generated card reports health ok without a distance.", "A value outside the vocabulary is still rejected as a build problem, and the vendored manifest must be refreshed separately before the five cards stop showing a warning." ] } }